﻿#import os
#import sys




# Настройка вывода ошибок в файл

# Определяется текущая директория

#__dir__ = os.path.dirname(os.path.abspath(__file__))
#path_error = os.path.join(__dir__, "so_test_error.log")

# Вывод ошибок перенаправляется в файл error.log в текущей директории

#sys.stderr = open(path_error, 'a')

from dbnew import db as superdb
import fdb

class db(superdb):
	"This class is a firebird connector"
	#print (self.__doc__)
	#beginning of class suite
	def __init__(self):
		super(db, self).__init__()
		self.driver=fdb
		self.user='sysdba'
		self.passwd='imech'
		self.host='sa-fs7.tb.local'
		self.db='C:\IM_SW\Search\DB\SEARCH4.GDB'
	
	def open(self):
		"This function opens connection to db"
		#print (self.open.__doc__)
		#beginning of function suite
		self.conn = self.driver.connect(host=self.host, database=self.db, user=self.user, password=self.passwd)
		self.cursor = self.conn.cursor()
		return

	class relations(superdb.relations):
		"This class counts and select records for fdb relations"
		#beginning of class suite
		#print (self.__doc__)
		#Инициализация:
		def __init__(self):
			super(db.relations, self).__init__()
			self.db=db()
			self.variable='?'

		def catalogue(self, type):
			return 'RDB$RELATIONS WHERE RDB$SYSTEM_FLAG=0 AND RDB$RELATION_TYPE IN '+type

		def field(self, type):
			return ' AND '+'TRIM(RDB$RELATION_NAME)'
		
		def type(self,type):
			'Function returns db specific type sign'
			dict={'t':'(0)','v':'(1)','a':'(0,1)'}
			return dict[type]

		def executer(self, string, variable=None):
			#Выполняется транзакция
			if not variable:
				self.db.cursor.execute(string)
			else:
				self.db.cursor.execute(string, [variable])
			#Функция возвращает результат запроса
			return self.db.cursor.fetchall()

		#Определяется функция выборки похожих таблиц и видов
		def SelectlikeAny(self,names=['']):
			'''Function selects like any'''
			#beginning of function suite
			#print(self.SelectlikeAny.__doc__)
			#end of function suite
			#Функция возвращает выборку таблиц и видов с похожими именами
			return self.selectlike(self.type('a'),names)

		#Определяется функция выборки таблиц и видов
		def SelectAny(self,names=['']):
			'''Function selects any'''
			#beginning of function suite
			#print(self.SelectAny.__doc__)
			#end of function suite
			#Функция возвращает выборку таблиц и видов с заданными именами
			return self.select(self.type('a'),names)
		
		#Определяется функция подсчета количества похожих таблиц и видов
		def CountlikeAny(self,names=['']):
			'''Function counts any'''
			#beginning of function suite
			#print(self.CountlikeAny.__doc__)
			#end of function suite
			#Функция возвращает число таблиц и видов с похожим именами
			return self.countlike(self.type('a'),names)
		
		#Определяется функция подсчета количества таблиц и видов
		def CountAny(self,names=['']):
			'''Function counts any'''
			#beginning of function suite
			#print(self.CountAny.__doc__)
			#end of function suite
			#Функция возвращает число таблиц и видов с заданными именами
			return self.count(self.type('a'),names)

		#end of class suite
		
	#end of class suite




#Вывод ошибок возвращается "в исходное положение"

#sys.stderr.close()
#sys.stderr = sys.__stderr__